<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 350px;
            height: 350px;
            margin: 100px;
            border: 1px solid #ccc;
            position: relative;
        }

        .big {
            width: 400px;
            height: 400px;
            position: absolute;
            top: 0;
            left: 360px;
            border: 1px solid #ccc;
            overflow: hidden;
            display: none;
        }

        .mask {
            width: 175px;
            height: 175px;
            background: rgba(255, 255, 0, 0.4);
            position: absolute;
            top: 0;
            left: 0;
            cursor: move;
            display: none;
        }

        .small {
            position: relative;
        }

        .box img {
            vertical-align: top;
        }

        #bigBox img {
            position: absolute;
        }
    </style>
</head>
<body>
<div class="box" id="box">
    <div id="smallBox" class="small">
        <img src="images/001.jpg" width="350" alt=""/>

        <div id="mask" class="mask"></div>
    </div>
    <div id="bigBox" class="big">
        <img id="bigImg" src="images/0001.jpg" width="800" alt=""/>
    </div>
</div>
<script>
    //需求 鼠标经过盒子 显示遮罩和大图 鼠标移动的时候 让遮罩跟着移动让大图按照比例移动
    //找人
    var box = document.getElementById("box");
    var smallBox = document.getElementById("smallBox");
    var bigBox = document.getElementById("bigBox");
    var bigImg = document.getElementById("bigImg");
    var mask = document.getElementById("mask");
    //1.鼠标经过盒子 显示遮罩和大图 鼠标离开 隐藏
    smallBox.onmouseover = function () {
        //显示遮罩和大图
        mask.style.display = "block";
        bigBox.style.display = "block";
    };
    smallBox.onmouseout = function () {
        //隐藏遮罩和大图
        mask.style.display = "none";
        bigBox.style.display = "none";
    };
    //2.鼠标在盒子上移动的时候 让遮罩跟着鼠标的座标走
    smallBox.onmousemove = function (event) {
        var event = event || window.event;
        //鼠标在页面中的座标
        var pageX = event.pageX || event.clientX + document.documentElement.scrollLeft;
        var pageY = event.pageY || event.clientY + document.documentElement.scrollTop;
        //计算鼠标在盒子中的座标
        var boxX = pageX - box.offsetLeft;//这里不能用smallBox因为因为他的父级box是有定位的
        var boxY = pageY - box.offsetTop;
        //计算遮罩的座标
        var maskX = boxX - mask.offsetWidth / 2;//减去自身宽度的一半
        var maskY = boxY - mask.offsetHeight / 2;//减去自身高度的一半
        //3.限定遮罩位置
        if (maskX < 0) {
            maskX = 0;
        }
        if (maskX > smallBox.offsetWidth - mask.offsetWidth) {
            maskX = smallBox.offsetWidth - mask.offsetWidth;
        }
        if (maskY < 0) {
            maskY = 0;
        }
        if (maskY > smallBox.offsetHeight - mask.offsetHeight) {
            maskY = smallBox.offsetHeight - mask.offsetHeight;
        }
        console.log(maskX + "---" + maskY);
        //让遮罩跟着遮罩的座标走
        mask.style.left = maskX + "px";//记得加单位
        mask.style.top = maskY + "px";//记得加单位
        //4.按照比例移动大图
        //大图片当前的位置 = 大图片能够移动的总距离/遮罩能够移动的总距离*遮罩当前的位置
        //大图片能够移动的总距离 = 大图的宽度-大盒子的宽度
        var bigImgToMove = bigImg.offsetWidth - bigBox.offsetWidth;
        //遮罩能够移动的总距离 = 小盒子的宽度-遮罩的宽度
        var maskToMove = smallBox.offsetWidth - mask.offsetWidth;
        //rate = 大图片能够移动的总距离/遮罩能够移动的总距离
        var rate = bigImgToMove / maskToMove;
        //大图片当前的位置 = rate*遮罩当前的位置
        bigImg.style.left = -rate * maskX + "px";//方向相反所以是负数
        bigImg.style.top = -rate * maskY + "px";//方向相反所以是负数
    };


</script>
</body>
</html>
